起因:在最近的HaoYo
项目中, 需要生成出分享海报;恰巧后端同学最近比较忙,没时间去做这块业务;俺就自告奋勇,使用Koa.js(node.js)
来做这个功能。
众所周知, html
生成img
,其是通过浏览器本身获取到DOM
结构转为canvas
图层,继而生成可保存的图片,在node
端既没有浏览器内核也没有canvas
,这是唯一的问题。
一番努力google后,发现了这个仓库,使用超级简单;
node-html-to-image
:https://github.com/frinyvonnick/node-html-to-image
安装:
npm install node-html-to-image
# or
yarn add node-html-to-image
使用:
const nodeHtmlToImage = require('node-html-to-image')
async function html2img() {
await nodeHtmlToImage({
output: './image.png', // 输入图片地址及图片名称
html: '<html><body>Hello world!</body></html>' // html文件地址或html字符
})
console.log("生成图片完成")
}
问题:
在本地运行没一点问题, 部署到centeos
服务器后,就出现莫名其妙的问题;一顿搜索后发现其原因是文章开头所说的, node-html-to-image
是基于puppeteer
的,在puppeteer
的issue中有许多关于问题的解决办法;
常见问题及解决:
无法运行: 因为没有在Linux服务器上安装依赖环境;
error: Error: Failed to launch the browser process!
解决: 参考文档中的安装依赖: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#chrome-headless-doesnt-launch-on-unix
以centeos为例:
yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 -y
字体无法正常显示
将图片中用到的字体上传到服务器上即可, 以微软雅黑为例
复制windows本地的字体,字体在:
C:\Windows\Fonts
在服务器新建文件夹:
mkdir /usr/share/fonts/local
修改字体权限:
chmod -R 777 /usr/share/fonts/local
建立字体缓存:
(1)cd /usr/share/fonts/local (2)mkfontscale (3)mkfontdir (4)fc-cache -fv
启动 xfs 字体服务器:
/etc/init.d/xfs restart
查看已安装字体列表,判断是都安装成功:
fc-list
字体部分参考:https://blog.csdn.net/weixin_29388659/article/details/116806713
可根据实际情况自行检索办法